www.gusucode.com > matlab编程NSCT分解 图像融合 各个融合指标评价体系 分解源码程序 > matlab编程NSCT分解 图像融合 各个融合指标评价体系 分解源码程序/NSCT/modIHS.m

    function [F]=modIHS(M,P)
lamda = 10^-9;
eps = 10^-10;
M=double(M);
P=double(P);

%norm all bands be in range 0 to 1.
for i=1:size(M,3)
    bandCoeffs(i)=max(max(M(:,:,i)));
    M(:,:,i)=M(:,:,i)/bandCoeffs(i);
end
%norm pan to be in range 0 to 1
panCoeff=max(max(P));
P=P/panCoeff;


alpha=findalph(M,P);
[n,m,s]=size(M);

E1 = expEdge(P,lamda,eps);
E=phasecongmono(P);

%I=(alpha(1)*M(:,:,1)+alpha(2)*M(:,:,2)+alpha(3)*M(:,:,3)+alpha(4)*M(:,:,4));
I=(alpha(1)*M(:,:,1)+alpha(2)*M(:,:,2)+alpha(3)*M(:,:,3));
P=(P-mean(P(:)))*std(I(:))/std(P(:)) + mean(I(:));

for i=1:s
    F(:,:,i)=M(:,:,i)+E.*(P-I);
end



%restore data to original data range
for i=1:size(F, 3)
    F(:,:,i)=F(:,:,i)*bandCoeffs(i);
end


%m= min(min(min(F)));
%if m<0
%    F=F-m;
%end    
%F=F/max(max(max(F)));